﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using RouterControl.IO.UPnP;

namespace RouterControlTest
{
	/// <summary>
	/// Summary description for WindowsUpnpStackTest
	/// </summary>
	[TestClass]
	public class WindowsUpnpStackTest
	{
		public WindowsUpnpStackTest()
		{
			//
			// TODO: Add constructor logic here
			//
		}

		private TestContext testContextInstance;

		/// <summary>
		///Gets or sets the test context which provides
		///information about and functionality for the current test run.
		///</summary>
		public TestContext TestContext
		{
			get
			{
				return testContextInstance;
			}
			set
			{
				testContextInstance = value;
			}
		}

		#region Additional test attributes
		//
		// You can use the following additional attributes as you write your tests:
		//
		// Use ClassInitialize to run code before running the first test in the class
		// [ClassInitialize()]
		// public static void MyClassInitialize(TestContext testContext) { }
		//
		// Use ClassCleanup to run code after all tests in a class have run
		// [ClassCleanup()]
		// public static void MyClassCleanup() { }
		//
		// Use TestInitialize to run code before running each test 
		// [TestInitialize()]
		// public void MyTestInitialize() { }
		//
		// Use TestCleanup to run code after each test has run
		// [TestCleanup()]
		// public void MyTestCleanup() { }
		//
		#endregion

        [TestMethod]
        public void DumpDeviceSchema()
        {
            var finder = new UPnPDeviceFinderClass();

            var devices = finder.FindByType(RouterControl.IO.RootDeviceTypeIds.InternetGatewayDeviceType, 0);

            foreach (IUPnPDevice d in devices)
            {
                Console.WriteLine(d.FriendlyName);
                Console.WriteLine("------------------------------------------------------------");
                Console.WriteLine(d.GetDeviceSchemaXml(true));
                Console.WriteLine("------------------------------------------------------------");
            }
        }

		[TestMethod]
		public void FindDevices()
		{
			var cp = new UPnPDeviceFinderClass();

			var devices = cp.FindByType(RouterControl.IO.RootDeviceTypeIds.InternetGatewayDeviceType, 0);

			Assert.IsTrue(devices.Count > 0, "no devices found");

			foreach (IUPnPDevice dev in devices)
				DumpDevice(dev);
		}

		private void DumpDevice(IUPnPDevice device)
		{
			Console.WriteLine("Dump Device:");
			Console.WriteLine(device.FriendlyName);
			Console.WriteLine(device.UniqueDeviceName);

			// dump services
			foreach (IUPnPService d in device.Services)
			{
				DumpService(d);
			}

			// dump children
			foreach (IUPnPDevice d in device.Children)
			{
				DumpDevice(d);
			}
		}

		private void DumpService(IUPnPService service)
		{
			Console.WriteLine("Dump Service:");
			Console.WriteLine(service.Id);
		}
	}
}
